home *** CD-ROM | disk | FTP | other *** search
- .286
- JUMPS
- ASSUME CS:_Code,DS:_DATA,SS:_Stack
- ─────────────────────────────────────────────────────────────────────────────
- EXTRN _X_set_mode: FAR
- ─────────────────────────────────────────────────────────────────────────────
- _Stack Segment Para Stack 'Stack'
- db 2048 dup (?)
- _Stack EndS
- ─────────────────────────────────────────────────────────────────────────────
- _Data Segment Para Public 'Data'
- flames db 32*64 dup (0)
- new_flames db 32*64 dup (0)
- x dw 0
- y dw 0
-
-
- _Data EndS
-
- _Code Segment Para Public 'Code'
-
- SetBorder Macro color
- mov dx,03dah ; Used for speed test
- in al,dx
- nop
- nop
- nop
- mov dx,03c0h
- mov al,11h+32
- out dx,al
- mov al,color
- out dx,al
- EndM
-
- Intro Proc Far
- push ds
- xor ax,ax
- push ax
- ASSUME ds:_DATA
- mov ax,_DATA
- mov ds,ax
-
- mov ax,0013h
- int 10h
-
- mov dx,03c8h ; Set up palette, black -> red
- xor al,al
- out dx,al
- inc dx
- mov cx,8
- @set_red:
- mov al,16 ; Some stupid comments
- sub al,cl
- shl al,3 ; Multiply al with 4
- out dx,al
- xor al,al ; Xor al with al
- out dx,al
- out dx,al
- loop @set_red ; Loop this 16 times (nah...no more stupid comments)
-
- mov cx,16 ; Set red -> yellow
- @set_yellow:
- mov al,60
- out dx,al
- mov al,16
- sub al,cl
- shl al,2
- out dx,al
- xor al,al
- out dx,al
- loop @set_yellow
-
- mov cx,16 ; set yellow -> white
- @set_white:
- mov al,60
- out dx,al
- out dx,al
- mov al,16
- sub al,cl
- shl al,2
- out dx,al
- loop @set_white
-
- mov cx,208 ; Set remaing colors to white
- mov al,63
- @whithey:
- out dx,al
- out dx,al
- out dx,al
- loop @whithey
-
- @WaitESC:
-
- SetBorder 200 ; Delete the speed test when used in a proggie
-
- push ds
- pop es
- cld
-
- lea di,flames
- mov si,di
- add di,64
- add si,96
- mov cx,61*16
- rep movsw ; Scroll the array 1 step up
-
- inc di
- add di,5
- mov cx,4
- @put_hot_spots:
- push di
- push cx
- push di
- mov ax,20 ; Get a random x value for hotspot
- call random
- pop di
- add di,ax
- push di
- mov ax,190
- call random
- pop di
- pop cx
- mov ah,al
- mov [di],ax ; Set the hotspot
- pop di
- loop @put_hot_spots ; Set 4 new hotspots
-
- mov word ptr x,1
- mov word ptr y,1
- @scanning_flames: ; Loop for calculate the new flame array
- mov di,y ; Interpolate the 8 pixels around the location we wanna calculte a new value for
- shl di,5
- add di,x
- xor ax,ax
- xor bx,bx
- mov bl,flames[di-33]
- mov al,flames[di-32]
- add bx,ax
- mov al,flames[di-31]
- add bx,ax
- mov al,flames[di-1]
- add bx,ax
- mov al,flames[di+1]
- add bx,ax
- mov al,flames[di+31]
- add bx,ax
- mov al,flames[di+33]
- add bx,ax
- mov al,flames[di+33]
- add bx,ax
- shr bx,3
- mov new_flames[di],bl ; Save this in the new array
- inc x
- cmp word ptr x,32
- jb @scanning_flames
- mov word ptr x,1
- inc y
- cmp word ptr y,64
- jb @scanning_flames ; Do it for the whole "map"
-
- lea di,flames
- lea si,new_flames
- mov cx,64*16
- rep movsw ; Move new "map" to old "map" array
-
- mov ax,0a000h
- mov es,ax
- lea si,flames
- mov di,320*100+100
- mov bx,60
- @plot_it:
- mov cx,16
- rep movsw
- add di,320-32
- dec bx
- jnz @plot_it ; Plot the flames
-
- SetBorder 0 ; Delete this speed test
-
-
- mov dx,03dah
- @bettan:
- in al,dx
- test al,8
- je @bettan
- @bettan2:
- in al,dx
- test al,8
- jne @bettan2 ; Wait for vertical retrace
-
-
- in al,60h
- cmp al,1
- jne @WaitESC ; Wait until the user have pressed ESC
-
- mov ax,0003h ; Text mode and Leave the program.
- int 10h
- mov ax,4c00h
- int 21h
- Intro EndP
-
- ;--------------------------------------------------------------------------------
- ; The above program is made by Errand and is released to the public domain.
- ; Thanks to Jare of Iguana for the information of the "simple" formula for
- ; flames.
- ;
- ; If you find this file interesting then PLEASE send me a postcard 8)
- ;
- ; Daniel Sjoberg
- ; Mogatan 11
- ; S-566 34 HABO
- ; SWEDEN
- ;
- ; Phone: (+46) 36 - 46309 CET (Dont call me at nights 8) )
- ;
- ; Greetings goes to: Jare (Iguana), Leinad (*Avalanche*), Zax (*Avalanche*),
- ; wReam (CB!), ZigZag (CB!), Patch (*Avalanche*)
- ; and the rest nice IRC-folks I know...
- ;
- ;
- ;--------------------------------------------------------------------------------
-
- ;-------------------------------------------------------------------------------
- ; Author: Unknown. The author is the author of the HYPERCUBE Tumble program.
- ;-------------------------------------------------------------------------------
- RandSeed dd 0
-
- Randomize Proc
- mov ah,2Ch
- int 21h
- mov Word ptr cs:[RandSeed],cx
- mov Word ptr cs:[RandSeed+2],dx
- ret
- Randomize endP
-
- ;-------------------------------------------------------------------------------
- ; In: AX - Range
- ; Out: AX - Value within 0 through AX-1
- ; Destroys: All ?X and ?I registers
- Random proc
- mov cx,ax ; save limit
- mov ax,Word ptr cs:[RandSeed+2]
- mov bx,Word ptr cs:[RandSeed]
- mov si,ax
- mov di,bx
- mov dl,ah
- mov ah,al
- mov al,bh
- mov bh,bl
- xor bl,bl
- rcr dl,1
- rcr ax,1
- rcr bx,1
- add bx,di
- adc ax,si
- add bx,62e9h
- adc ax,3619h
- mov word ptr cs:[RandSeed],bx
- mov word ptr cs:[RandSeed+2],ax
- xor dx,dx
- div cx
- mov ax,dx ; return modulus
- ret
- Random EndP
-
- _Code EndS
- ─────────────────────────────────────────────────────────────────────────────
-
- END Intro